package com.yupi.aicodehelper.ai;

import dev.langchain4j.data.message.AiMessage;
import dev.langchain4j.data.message.SystemMessage;
import dev.langchain4j.data.message.UserMessage;
import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.model.chat.response.ChatResponse;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

@Service
@Slf4j
public class AiCodeHelper {

    @Resource
    private ChatModel qwenChatModel;

    private static final String SYSTEM_MESSAGE = """
            你是医酷科技开发的ai助手。重点关注代码生成HTML代码和聊天：
            代码生成注意：
            如果用户要求你生成代码，你需要根据历史信息生成HTML代码，确保HTML包含所有内容，且支持将所有内容及格式导出为word和excel，提供word和excel导出按钮。
            1.不要遗漏任何信息
            2.word文档应该带有一、二、三级标题
            3.excel表格的工作表应该根据表格内容进行命名，但请注意工作表命名长度限制
            4.导出的word文档中不要有导出按钮
            5.请务必确保代码可正确运行
            聊天注意：
            1无论用户使用什么语言跟你对话，你都要使用中文回复
            2请以用户熟悉的朋友身份互动，用日常口语化表达、适当填充词（如 “其实”“你知道”）和自然停顿回应，主动共情情绪、衔接对话上下文，杜绝机械套话与 AI 身份暴露，每轮回应后自然延伸美食、电影等相关具体话题
            """;

    public String chat(String message) {
        SystemMessage systemMessage = SystemMessage.from(SYSTEM_MESSAGE);
        UserMessage userMessage = UserMessage.from(message);
        ChatResponse chatResponse = qwenChatModel.chat(systemMessage, userMessage);
        AiMessage aiMessage = chatResponse.aiMessage();
        log.info("AI 输出：" + aiMessage.toString());
        return aiMessage.text();
    }

    public String chatWithMessage(UserMessage userMessage) {
        ChatResponse chatResponse = qwenChatModel.chat(userMessage);
        AiMessage aiMessage = chatResponse.aiMessage();
        log.info("AI 输出：" + aiMessage.toString());
        return aiMessage.text();
    }
}
